package main

import (
	"fmt"
	"golang.org/x/net/html"
	"net/http"
	"os"
	"strings"
)

func main() {
	// 指定要爬取的网页 URL
	url := "https://prompthero.com/midjourney--6-prompts?page=1" // 替换为您要爬取的网页 URL

	// 发起 HTTP 请求获取网页内容
	response, err := http.Get(url)
	if err != nil {
		fmt.Fprintf(os.Stderr, "HTTP GET error: %v\n", err)
		return
	}
	defer response.Body.Close()

	// 解析 HTML 内容
	doc, err := html.Parse(response.Body)
	if err != nil {
		fmt.Fprintf(os.Stderr, "HTML parse error: %v\n", err)
		return
	}

	// 遍历 HTML 树并查找具有特定 class 属性的元素
	var findNode func(*html.Node)
	findNode = func(n *html.Node) {
		if n.Type == html.ElementNode && n.Data == "img" {
			for _, attr := range n.Attr {
				if attr.Key == "class" && strings.Contains(attr.Val, "img-fluid prompt-main-image") {
					// 如果元素具有特定 class 属性，则获取相关信息
					fmt.Println("Found image element with class 'img-fluid prompt-main-image':")
					fmt.Println("Image URL:", getAttributeValue(n, "src"))
					fmt.Println("Alt text:", getAttributeValue(n, "alt"))
					return
				}
			}
		}
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			findNode(c)
		}
	}

	findNode(doc)
}

// 辅助函数用于获取节点的属性值
func getAttributeValue(n *html.Node, key string) string {
	for _, attr := range n.Attr {
		if attr.Key == key {
			return attr.Val
		}
	}
	return ""
}
